The Land Surface Water Index (LSWI) is a water-sensitive spectral index that uses
near-infrared (NIR) and shortwave infrared (SWIR) reflectance to capture changes in
vegetation water content and surface moisture. It is widely used for drought monitoring,
irrigation tracking and flooded area mapping. 0
1. Definition & Concept
LSWI (Land Surface Water Index) measures liquid water signal in vegetation
and soil by exploiting the strong absorption of liquid water in the SWIR region and the
sensitivity of the NIR region to vegetation structure.
LSWI = (NIR − SWIR) / (NIR + SWIR)
Typical LSWI values range between −1 and +1. Higher positive values
usually indicate more surface water or higher canopy water content, while lower or
negative values indicate dry soil, bare land or built-up areas.
Main applications
Monitoring crop water status and irrigation events
Drought and vegetation stress assessment
Mapping flooded rice paddies and wetlands
Supporting fire risk analysis and post-fire recovery studies
Type: Normalized water index (NIR–SWIR)
2. Data & Bands for LSWI
Common sensors & band combinations
Sentinel-2 MSI (10–20 m)
NIR: B8A (848–880 nm) or B8 (842 nm)
SWIR: B11 (1610 nm)
Landsat 8/9 OLI (30 m)
NIR: B5
SWIR: B6 (or B6/B7 depending on study design)
Good practice
Use surface reflectance products (atmospherically corrected).
Mask clouds, cloud shadows and snow using quality bands where available.
Limit the time window (e.g. within one growing season) to reduce phenology mixing.
Always interpret LSWI together with vegetation indices (e.g. NDVI / EVI) and land-cover data.
3. Interpretation of LSWI
Typical value ranges (example)
LSWI > 0.2 – water bodies, flooded areas, very wet soil / canopy
0.0 – 0.2 – moist vegetation or soil with moderate water content
−0.2 – 0.0 – dry vegetation, sparse cover, transition to bare soil
< −0.2 – bare soil, rock, impervious surfaces, urban areas
Known limitations
Can be noisy over very bright surfaces (salt flats, deserts, snow).
Sensitive to strong atmospheric effects if not corrected (haze, aerosols).
LSWI anomalies → drought detection compared to multi-year baseline.
LSWI + DEM → wetland delineation in low-lying terrain.
5. Google Earth Engine code – LSWI for any AOI (Sentinel-2)
How to use: open the Google Earth Engine Code Editor, paste the script below in a new
script, draw your Area of Interest (AOI) on the map (it will appear as geometry), then click
Run. You can export the LSWI layer as GeoTIFF to Google Drive.
// -------------------------------------------------------
// LSWI (Land Surface Water Index) with Sentinel-2 SR
// Any AOI drawn as 'geometry' in the map
// -------------------------------------------------------
// 1. Define Area of Interest (AOI) & date range
var roi = geometry; // Draw a polygon/rectangle on the map
var startDate = '2023-01-01';
var endDate = '2023-12-31';
// 2. Cloud masking function for Sentinel-2 SR
function maskS2clouds(image) {
var scl = image.select('SCL');
// Remove clouds, cloud shadows, cirrus, snow
var mask = scl.neq(3) // cloud shadow
.and(scl.neq(8)) // medium/high clouds
.and(scl.neq(9)) // thin cirrus
.and(scl.neq(10)) // snow
.and(scl.neq(11)); // snow/ice
return image.updateMask(mask);
}
// 3. Load Sentinel-2 SR collection and create a median composite
var s2 = ee.ImageCollection('COPERNICUS/S2_SR')
.filterBounds(roi)
.filterDate(startDate, endDate)
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 30))
.map(maskS2clouds);
var composite = s2.median().clip(roi);
// 4. Compute LSWI = (NIR - SWIR) / (NIR + SWIR)
var nir = composite.select('B8A'); // Narrow NIR (you can also use B8)
var swir = composite.select('B11'); // SWIR band
var lswi = nir.subtract(swir)
.divide(nir.add(swir).add(1e-6)) // add small value to avoid division by zero
.rename('LSWI');
// 5. Visualization parameters
var lswiVis = {
min: -1.0,
max: 1.0,
palette: [
'#440154', // very dry / built-up
'#3b528b',
'#21908c',
'#5dc963',
'#fefcc9' // very wet / water
]
};
// 6. Add layers to the map
Map.centerObject(roi, 9);
Map.addLayer(lswi, lswiVis, 'LSWI (Sentinel-2)', true);
// Optional: True color composite for context
var s2_rgb = s2
.select(['B4','B3','B2']) // R, G, B
.median()
.clip(roi);
Map.addLayer(s2_rgb, {min: 0, max: 3000}, 'True Color (RGB)', false);
// 7. Export LSWI as GeoTIFF to Google Drive
Export.image.toDrive({
image: lswi,
description: 'LSWI_Export',
fileNamePrefix: 'LSWI_Export',
folder: 'GEE_LSWI',
region: roi,
scale: 20, // ~20 m for Sentinel-2
crs: 'EPSG:4326',
maxPixels: 1e13
});
🔎 يمكنك تغيير startDate و endDate، ونسبة السحب (CLOUDY_PIXEL_PERCENTAGE)،
ومستوى التكبير (Map.centerObject) حسب المشروع والمنطقة الخاصة بك.